package com.ywd.platform.netty.jt080.po;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 位置信息上报消息
 */
@Accessors(chain=true)
@Data
public class LocationBody implements Serializable {
    // 报警标志 (16字节)
    //"报警标志对象": {
    //      "[bit31]保留": "0",
    //      "[bit30]侧翻预警": "0",
    //      "[bit29]碰撞预警": "0",
    //      "[bit28]车辆非法位移": "0",
    //      "[bit27]车辆非法点火": "0",
    //      "[bit26]车辆被盗(通过车辆防盗器)": "0",
    //      "[bit25]车辆油量异常": "0",
    //      "[bit24]车辆VSS故障": "0",
    //      "[bit23]路线偏离报警": "0",
    //      "[bit22]路段行驶时间不足/过长": "0",
    //      "[bit21]进出路线": "0",
    //      "[bit20]进出区域": "0",
    //      "[bit19]超时停车": "0",
    //      "[bit18]当天累计驾驶超时": "0",
    //      "[bit17]右转盲区异常报警": "0",
    //      "[bit16]胎压预警": "0",
    //      "[bit15]违规行驶报警": "0",
    //      "[bit14]疲劳驾驶预警": "0",
    //      "[bit13]超速预警": "0",
    //      "[bit12]道路运输证IC卡模块故障": "0",
    //      "[bit11]摄像头故障": "0",
    //      "[bit10]TTS模块故障": "0",
    //      "[bit9]终端LCD或显示器故障": "0",
    //      "[bit8]终端主电源掉电": "0",
    //      "[bit7]终端主电源欠压": "0",
    //      "[bit6]GNSS天线短路": "0",
    //      "[bit5]GNSS天线未接或被剪断": "0",
    //      "[bit4]GNSS模块发生故障": "0",
    //      "[bit3]危险预警": "0",
    //      "[bit2]疲劳驾驶": "0",
    //      "[bit1]超速报警": "0",
    //      "[bit0]紧急报警,触动报警开关后触发": "0"
    //    },
    private long alarmFlag;

    // 状态标志 (16字节)
    //"状态标志对象": {
    //      "[bit23~bit31]保留": "000000000",
    //      "[0]bit22": "车辆处于停止状态",
    //      "[0]bit21": "未使用Galileo卫星进行定位",
    //      "[0]bit20": "未使用GLONASS卫星进行定位",
    //      "[0]bit19": "未使用北斗卫星进行定位",
    //      "[0]bit18": "未使用GPS卫星进行定位",
    //      "[0]bit17": "门5关",
    //      "[0]bit16": "门4关",
    //      "[0]bit15": "门3关",
    //      "[0]bit14": "门2关",
    //      "[0]bit13": "门1关",
    //      "[0]bit12": "车门解锁",
    //      "[0]bit11": "车辆电路正常",
    //      "[0]bit10": "车辆油路正常",
    //      "[00]bit8~bit9": "空车",
    //      "[bit6~bit7]保留": "00",
    //      "[0]bit5": "经纬度未经保密插件加密",
    //      "[0]bit4": "运营状态",
    //      "[0]bit3": "东经",
    //      "[0]bit2": "北纬",
    //      "[0]bit1": "未定位",
    //      "[0]bit0": "ACC关"
    //    },
    private long statusFlag;

    // 纬度 (4字节) - 转换为度
    private double latitude;

    // 经度 (4字节) - 转换为度
    private double longitude;

    // 高程 (2字节)
    private int altitude;

    // 速度 (2字节) - 转换为km/h
    private double speed;

    // 方向 (2字节)
    private int direction;

    // 定位时间 (6字节BCD码)
    private String gpsTime;

    //附加信息列表
    private Map<Integer, byte[]> extraInfo = new HashMap<>();

    //报警信息列表
    private Map<AlarmType, Boolean> alarmMap = new HashMap<>();

    //状态信息列表
    private Map<StatusFlag, Boolean> statusMap = new HashMap<>();

}